package com.qk.common.util;

import io.jsonwebtoken.Claims;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;
import java.util.Map;

/**
 *
 * @author MrZhao
 * @created 2025-10-11 10:09
 * @description JWT工具类（生成令牌、解析令牌）
 * 1、构造私有化
 * 2、提供静态方法
 */
public class JwtUtil {
    // 令牌过期时间12小时
    private static final long EXPIRE_TIME = 12 * 60 * 60 * 1000;
    // 密钥
    private static final String SECRET_KEY = "Wxwrrsf542assz";

    /**
     * 生成令牌
     *
     * @param claims 令牌中携带自定义数据
     * @return String  JWT令牌
     */
    public static String generateToken(Map<String, Object> claims) {

        return Jwts.builder()
                .setExpiration(new Date(System.currentTimeMillis() + EXPIRE_TIME))
                .setClaims(claims)
                .signWith(SignatureAlgorithm.HS256, SECRET_KEY)
                .compact();
    }

    /**
     * 解析令牌
     *
     * @param token JWT令牌
     * @return Claims  令牌中携带自定义数据
     * <p>
     * 如果这个方法抛出任何异常就说明解析失败令牌无效！
     */
    public static Claims parseToken(String token) {
        return Jwts.parser()
                .setSigningKey(SECRET_KEY)
                .parseClaimsJws(token)
                .getBody();
    }


}
